import superagent from 'superagent';
import WeixinAccessTokenModel from '../models/weixin-access-token';

export default class WeApp {
  static async getAccessToken(hotel_id) {
    const wxAccessToken = await WeixinAccessTokenModel.findOne({ where: { hotel_id }, rejectOnEmpty: new Error('无效的酒店') });
    return wxAccessToken.access_token;
  }

  /**
   * 获取小程序 URL Link，适用于短信、邮件、网页、微信内等拉起小程序的业务场景。
   * @param {Object} options
   * @param {String} options.access_token 接口调用凭证 非必填 与hotel_id 二选一
   * @param {String} options.hotel_id 酒店id 非必填 与access_token 二选一
   * @param {String} options.query 通过 URL Link 进入小程序时的query，最大1024个字符，只支持数字，大小写英文以及部分特殊字符：!#$&'()*+,/:;=?@-._~%
   */
  static async generateUrlLink(options) {
    try {
      let { access_token } = options;
      if (!access_token && options.hotel_id) {
        // const wxAccessToken = await WeixinAccessTokenModel.findOne({ where: { hotel_id: options.hotel_id }, rejectOnEmpty: new Error('无效的酒店') });
        access_token = await WeApp.getAccessToken(options.hotel_id);
      }

      const response = await superagent.post(`https://api.weixin.qq.com/wxa/generate_urllink?access_token=${access_token}`)
        .set('Content-Type', 'application/json')
        .accept('application/json')
        .send({
          path: '/pages/index/index',
          query: options.query,
          expire_type: 1,
          expire_interval: 1,
          env_version: 'release'
        });

      if (response.statusCode === 200) {
        console.log('https://api.weixin.qq.com/wxa/generate_urllink', response.body);
        return response.body;
      }
      throw new Error(`获取小程序 URL Link失败, statusCode: ${response.statusCode}, ${response.text}`);
    }
    catch (e) {
      throw new Error(`获取小程序 URL Link失败: ${e.message}`);
    }
  }
}
